#ifndef __APP_MESSAHE_H
#define __APP_MESSAHE_H

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "common/log/log.h"
#include "common/cJSON/cJSON.h"

/*外设数据格式：
第一个字节：设备类型
第二个字节：设备id数据的长度
第三个字节：实际数据的长度
第四个字节之后：device_id + 实际数据
*/

/*设备类型*/
typedef enum ConnectionTypeEnum
{
    CONNECTION_TYPE_NONE = 0,
    CONNECTION_TYPE_LORA = 1,
    CONNECTION_TYPE_BLE_MESH = 2
}ConnectionType;

/*消息帧结构体*/
typedef struct MessageStruct
{
    ConnectionType connection_type; //连接类型
    unsigned char *payload;         //消息体
    int id_len;                     //设备id长度
    int data_len;                   //数据长度
}Message;

/*将从外设数据封装为消息帧*/
int app_message_DataToMessage(Message *message, void *data, int len);

/*将接收到的json字符串封装成消息帧*/
int app_message_JsonToMessage(Message *message, char *json_str, int len);

/*拆封消息帧转化为外设数据*/
int app_message_MessageToData(Message *message, void *data, int len);

/*拆封消息帧转化为json字符串*/
int app_message_MessageToJson(Message *message, char *json_str, int len);

/*释放堆内存*/
void app_message_free(Message *message);

#endif 